
package com.ruoyi.busi.contest.controller;

import com.ruoyi.busi.contest.domain.Contest;
import com.ruoyi.busi.contest.domain.dto.CompetitionCreateDTO;
import com.ruoyi.busi.contest.domain.dto.StatusStageUpdateDTO;
import com.ruoyi.busi.contest.service.IContestService;
import com.ruoyi.common.web.core.BaseController;
import com.ruoyi.common.core.core.domain.AjaxResult;
import com.ruoyi.common.orm.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 大赛信息Controller
 */
@RestController
@RequestMapping("/competition")
public class ContestController extends BaseController {
    @Autowired
    private IContestService contestService;

    /**
     * 查询大赛列表(分页)
     */
    @GetMapping("/list")
    public TableDataInfo list(Contest contest) {
        return getDataTable(contestService.selectContestList(contest));
    }

    /**
     * 获取大赛详细信息
     */
    @GetMapping("/detail")
    public AjaxResult getInfo(@RequestParam Long id) {
        CompetitionCreateDTO contest = contestService.selectContestById(id);
        return contest != null ? success(contest) : error("大赛不存在");
    }

    /**
     * 创建大赛(完整信息)
     * @param dto 大赛创建参数
     * @return 创建结果
     */
    @PostMapping("/create")
    public AjaxResult createCompetition(@RequestBody CompetitionCreateDTO dto) {
        return contestService.createCompetition(dto);
    }

    /**
     * 修改大赛(完整信息)
     * @param dto 大赛更新参数
     * @return 修改结果
     */
    @PutMapping("/update")
    public AjaxResult updateCompetition(@RequestBody CompetitionCreateDTO dto) {
        return contestService.updateCompetition(dto);
    }

    /**
     * 删除大赛
     */
    @PostMapping("/delete")
    public AjaxResult remove(@RequestParam Long id) {
        return toAjax(contestService.deleteContestById(id));
    }

    /**
     * 获取大赛基本信息
     */
    @GetMapping("/basic-info")
    public AjaxResult getBasicInfo(@RequestParam Long id) {
        Contest contest = contestService.getContestBasicInfo(id);
        return contest != null ? success(contest) : error("大赛不存在");
    }

    /**
     * 更新大赛状态和当前阶段
     * @param dto 包含id、status和currentStage的请求体
     * @return 更新结果
     */
    @PostMapping("/status-stage")
    public AjaxResult updateStatusAndStage(@RequestBody StatusStageUpdateDTO dto) {
        return contestService.updateContestStatusAndStage(dto.getId(), dto.getStatus(), dto.getCurrentStage());
    }

    /**
     * 获取大赛所有阶段信息
     * @param id 大赛ID
     * @return 阶段列表
     */
    @GetMapping("/stages")
    public AjaxResult getCompetitionStages(@RequestParam Long id) {
        return success(contestService.getCompetitionStages(id));
    }
}
